import java.util.*;

/*
 * @lc app=leetcode.cn id=49 lang=java
 *
 * [49] 字母异位词分组
 */

// @lc code=start
class Solution {
    // 自己写的，在IDEA上写的舒服多了，可以输入样例本机debug。另外也没有那么多红色波浪线。
    //这个可以这样处理：扫描strs，每个单词直接按字典序sort，如果ans中没有，加进去
    // 傻逼题目，测试用例里有重复String，描述里又不说。那就不需要用set了
     /*
    这个题目学到了点东西
    1. 如何输出List<List<String>> ，其实直接toString即可，它重写了的
    2. 如何遍历HashMap的内部内容，有三个方法。总结在md文档里了，主要是用entry，这个方法key和value都可以访问
    3. char[] temp 的toString方法没有重写，输出的貌似是它的hashCode ，所以一开始没写对，后来用 String s = String.valueOF(temp)来转成String即可
    */
    public List<List<String>> groupAnagrams1(String[] strs) {
        HashMap<String, List<String>> ans = new HashMap<>();
        for(String s : strs){
            char[] temp = s.toCharArray();
            Arrays.sort(temp);
            // temp.toString();这个toString你跳转进去，可以看到它没重写，输出的是hashCode
            String f = String.valueOf(temp);
            if (!ans.containsKey(f)) {
                ans.put(f, new ArrayList<>());
            }
            ans.get(f).add(s);//往对应的List里加s这个string进去
        }
        // 然后遍历ans中的每个元素，将其从Set<String>转成List<String>
        List<List<String>> result = new ArrayList<>();

        Iterator iter = ans.entrySet().iterator();
        while (iter.hasNext()){
            Map.Entry entry = (Map.Entry)iter.next();
            List<String> ls = new ArrayList<>((List<String>)entry.getValue());
            result.add(ls);
        }
        return result;
    }

    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> ans = new HashMap<>();
        for(String s : strs){
            char[] temp = s.toCharArray();
            Arrays.sort(temp);
            // temp.toString();这个toString你跳转进去，可以看到它没重写，输出的是hashCode
            String f = String.valueOf(temp);
            if (!ans.containsKey(f)) {
                ans.put(f, new ArrayList<>());
            }
            ans.get(f).add(s);//往对应的List里加s这个string进去
        }
        return new ArrayList<List<String>>(ans.values());//Collection<List<String>>
    }
    //？？？还可以这么直接return的么

}
// @lc code=end

